package com.pmt.feedplayer.core

import com.pmt.feedplayer.data.TranslationResult
import kotlinx.coroutines.flow.Flow

/**
 * 音频提取器接口
 * 负责从视频流中提取音频数据
 */
interface AudioExtractor {
    /**
     * 从视频URL提取音频流
     * @param videoUrl 视频URL
     * @return 音频数据字节流
     */
    suspend fun extractAudio(videoUrl: String): Flow<ByteArray>
    
    /**
     * 停止提取音频
     */
    fun stop()
    
    /**
     * 设置音频缓冲区大小（影响延迟）
     */
    fun setBufferSize(sizeInMs: Int)
}

/**
 * 语音识别器接口
 * 负责将音频数据转换为文本
 */
interface SpeechRecognizer {
    /**
     * 识别音频数据
     * @param audioData 音频数据
     * @return 识别出的文本
     */
    suspend fun recognize(audioData: ByteArray): String
    
    /**
     * 停止识别
     */
    fun stop()
    
    /**
     * 设置识别语言
     */
    fun setLanguage(languageCode: String)
    
    /**
     * 获取识别置信度
     */
    fun getConfidence(): Float?
}

/**
 * 翻译器接口
 * 负责文本翻译
 */
interface Translator {
    /**
     * 翻译文本
     * @param text 源文本
     * @param sourceLang 源语言代码
     * @param targetLang 目标语言代码
     * @return 翻译后的文本
     */
    suspend fun translate(text: String, sourceLang: String, targetLang: String): String
    
    /**
     * 批量翻译
     */
    suspend fun batchTranslate(texts: List<String>, sourceLang: String, targetLang: String): List<String>
    
    /**
     * 停止翻译服务
     */
    fun stop()
}

/**
 * 字幕管理器接口
 * 负责管理字幕的生成、同步和显示
 */
interface SubtitleManager {
    /**
     * 添加翻译结果
     */
    fun addTranslationResult(result: TranslationResult)
    
    /**
     * 获取当前应该显示的字幕
     * @param currentTime 当前视频播放时间（毫秒）
     */
    fun getCurrentSubtitle(currentTime: Long): TranslationResult?
    
    /**
     * 设置字幕显示延迟（用于同步调整）
     */
    fun setSubtitleDelay(delayMs: Long)
    
    /**
     * 清除所有字幕
     */
    fun clearSubtitles()
    
    /**
     * 翻译结果流（用于实时更新字幕）
     */
    val translationResults: Flow<TranslationResult>
}